作者:陈先森的记忆 | 来源:互联网 | 2023-10-10 12:24
基本概念:
HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准,用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
谷歌、火狐等浏览器厂商也已经扛起HTTPS大旗,对于HTTP站点会提示不安全警告。而且像谷歌、百度等搜索引擎也早已响应HTTPS号召,都声称对HTTPS站点页面友好甚至优先抓取,排名靠前,当然具体实际实施情况就另当别论了。要让互联网站点都升级到HTTPS协议还需一段时间,但不可否认HTTPS是大势所趋。
网站环境:
操作系统:centos6.5 x64 (阿里云ECS服务器)
web服务:Apache 2.4+
免费证书商家:Let's Encrypt SSL
网站程序: ZSITE建站系统
操作流程:
1.安装证书
Let's Encrypt SSL免费证书,有效期3个月,需要定期更新。( 更多国内外免费SSL证书推荐参考)
安装SSL证书可以使用 certbot 工具,操作十分简单方便。
下载 certbot,并设置权限:
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
使用certbot申请安装证书:
./certbot-auto certonly --webroot --apache -w /data/wwwroot/www.chanzhicms.com -d www.chanzhicms.com --no-self-upgrade
-w后面是网站的根目录路径,-d后面是申请证书的域名,多个域名的话,在后面继续添加设置多个-d即可。
申请成功后,可以查看到SSL证书的有效截止日期。申请的证书默认存放在 /etc/letsencrypt 目录下。
2.修改Apache配置文件
设置apache的配置文件 /usr/local/apache/conf/httpd.conf,要修改两个地方,找到下面两行将其前面的#去掉即可。
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
然后修改/usr/local/apache/conf/extra/httpd-ssl.conf 文件,将里面内容清空,放入下面内容:
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLProxyCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
Mutex sysvsem default
SSLStrictSNIVHostCheck on
最后修改网站的单独配置文件,/usr/local/apache/conf/vhost/www.chanzhicm.com.conf ,原本只有80端口配置,这里需要我们加上443端口的配置:
ServerAdmin admin@linuxeye.comDocumentRoot "/data/wwwroot/www.chanzhicms.com"ServerName www.chanzhicms.comServerAlias chanzhicms.comErrorLog "/data/wwwlogs/www.chanzhicms.com_error_apache.log"CustomLog "/data/wwwlogs/www.chanzhicms.com_apache.log" combined SetOutputFilter DEFLATEOptions FollowSymLinks ExecCGIRequire all grantedAllowOverride AllOrder allow,denyAllow from allDirectoryIndex index.html index.phpListen 443 DocumentRoot "/data/wwwroot/www.chanzhicms.com"ServerName www.chanzhicms.com:443ServerAlias www.chanzhicms.comErrorLog "/data/wwwlogs/www.chanzhicms.com_error_apache.log"ServerAdmin admin@linuxeye.comSSLEngine onSSLCertificateFile /etc/letsencrypt/live/www.chanzhicms.com/fullchain.pemSSLCertificateKeyFile /etc/letsencrypt/live/www.chanzhicms.com/privkey.pemSetOutputFilter DEFLATEOptions FollowSymLinksAllowOverride AllOrder allow,denyAllow from allDirectoryIndex index.html index.phpRequire all granted
上面配置中的网站名称、网站路径、证书路径等信息,大家根据自己的具体情况填写。
注意:
这里必须要特别强调一点,因为我的Apache版本是2.4+的,在Directory中,一定要加上一条 Require all granted ,否侧会出现网站HTTP访问正常,但https访问提示 403 forbidden。这条命令是apache2.4新增加的,用以替代allow,deny以及order指令。
最后, 重启Apache!重启Apache!重启Apache!
使用https访问网站,查看是否生效。
3.更新证书
证书快到期时,我在使用 certbot-auto renew 命令进行证书更新:
certbot-auto renew --no-self-upgrade
成功后,检查更新到期日期
./certbot-auto certificates
证书到期之前会有邮件提醒,这里介绍修改新订阅邮箱的方法:
./certbot-auto update_account --email 963370407@qq.com --no-self-upgrade
使用 crontab 自动续期证书
每隔两三个月更新一次证书,万一忘了怎么办?有木有版本让系统自动定期更新呢?当然可以,这里就需要用到 crontab 工具。
如果系统没有 crontab ,则先安装:
yum install vixie-cron crontabs //安装Crontab
chkconfig crond on //设为开机自启动
service crond start //启动
/var/spool/cron 这里是所有的自动执行任务的 cron 文件存放位置(root文件)
在/var/spool/cron/root文件里添加:
30 20 1 * * /root/certbot-auto renew --no-self-upgrade
即每月1号晚上8点半更新证书。
重启服务生效:
service crond restart
查看crontab定时执行任务列表
crontab -l
常见问题与更多内容,可参考原文:https://www.zsite.com/cms/340.html